package com.itheima.tlias.controller;

import com.itheima.tlias.model.entity.Dept;
import com.itheima.tlias.model.response.Result;
import com.itheima.tlias.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author byzhao
 * @created 2024-04-05 17:00:26
 * @describtion 部门表现层
 * @RestController : @Controller + @ResponseBody 注解
 * <p>
 * ① 将类加入spring IOC 容器
 * ② 将类中方法返回的是 对象，将对象序列化称json返回
 * @RequestMapping ：请求映射 ，属性 ： path： 路径绑定
 * 这个注解可用在类上，也可以用在方法上. 用在类上起到的作用是url路径窄化！
 */
@RestController
@RequestMapping(path = "/depts")
public class DeptController {

    @Autowired
    private DeptService deptService;

    @PutMapping
    public Result upda(@RequestBody Dept dept){
        deptService.updata(dept);
       return Result.success();
    }


    @GetMapping("/{id}")
      public Result<Dept> deptById(@PathVariable Integer id){
      Dept dept =  deptService.deptById(id);
      return Result.success(dept);
      }


    /**
     * 前端传递参数是json 后端该如何处理？
     *
     *   基于 注解 @RequestBody
     *   定义一个java对象接收json数据 ，json 属性 要和java 类中属性对应!
     *   名称一致性原则！
     *
     * @return
     */

    @PostMapping
    public Result add(@RequestBody Dept dept) {
        deptService.save(dept);
        return Result.success();
    }


    /**
     * ① 拉架子 定义一个公有无参无返回值方法
     * ② 根据接口手册补全 参数和返回值
     * a.返回值 最简单 统一 Result
     * b.参数
     * 开发原则：理论上讲 自顶向下设计，自底向上实现！
     * 实际为了开发方便 从controller ->service ->dao
     * 接收参数方式3： 前端传递参数名称要和后端参数名称保持一致！
     * springboot 中参数接收 ：名称一致性原则！
     */

    @DeleteMapping
    public Result delById(Integer id) {
        deptService.delById(id);
        return Result.success();
    }


    @GetMapping
    public Result<List<Dept>> depts() {
        return Result.success(deptService.getDepts());
    }


}
